(function(){
    var mtable = {};

    mtable.selector = null;

    mtable.init = function(selector){
        var _this = this;

        _this.selector = $(selector);

        _this.handle();

        return _this;
    };

    /**
     * 事件绑定
     */
    mtable.handle = function(){
        var _this = this;

        _this.checkSelf();
        _this.checkAll();
    };

    /**
     * 复选框单选
     */
    mtable.checkSelf = function(){
        var _this = this;

        _this.selector.delegate('.checkbox-self', 'click', function(e){
            if($(this).hasClass('unchecked')){
                $(this).removeClass('unchecked').addClass('checked');

                var obj = _this.statistics();
                if(obj.selectedNum == obj.count){    //全选
                    _this.selector.find('.checkbox-all').removeClass('unchecked halfchecked').addClass('checked');
                }else{    //半选
                    _this.selector.find('.checkbox-all').removeClass('unchecked checked').addClass('halfchecked');
                }
            }else if($(this).hasClass('checked')){
                $(this).removeClass('checked').addClass('unchecked');

                var obj = _this.statistics();
                if(obj.unSelectedNum == obj.count){    //全不选
                    _this.selector.find('.checkbox-all').removeClass('checked halfchecked').addClass('unchecked');
                }else{    //半选
                    _this.selector.find('.checkbox-all').removeClass('unchecked checked').addClass('halfchecked');
                }
            }
        });
    };

    /**
     * 复选框全选
     */
    mtable.checkAll = function(){
        var _this = this;

        _this.selector.delegate('.checkbox-all', 'click', function(e){
            if($(this).hasClass('unchecked')){    //全不选状态
                $(this).removeClass('unchecked halfchecked').addClass('checked');

                _this.selector.find('.checkbox-self').each(function(){
                    $(this).removeClass('unchecked').addClass('checked');
                });
            }else{    //全选或半选状态
                $(this).removeClass('checked halfchecked').addClass('unchecked');

                _this.selector.find('.checkbox-self').each(function(){
                    $(this).removeClass('checked').addClass('unchecked');
                });
            }
        });
    };

    /**
     * 统计未选，已选，和总数
     * @returns {*}
     */
    mtable.statistics = function(){
        var _this = this,
            ret = {
                count:0,
                unSelectedNum:0,
                selectedNum:0
            };

        _this.selector.find('.checkbox-self').each(function(){
            ++ret.count;
            if($(this).hasClass('unchecked')){
                ++ret.unSelectedNum;
            }else if($(this).hasClass('checked')){
                ++ret.selectedNum;
            }
        });
        return ret;
    };

    /**
     * 获取已选数据
     */
    mtable.getSelectData = function(){
        var _this = this,
            ret = [];

        _this.selector.find('.checkbox-self.checked').each(function(){
            ret.push($(this).data());
        });

        return ret;
    };

    mtable.cancelSelect = function(){
        var _this = this;

        _this.selector.find('.checkbox-self.checked').each(function(){
            $(this).removeClass('checked').addClass('unchecked');
        });

        _this.selector.find('.checkbox-all').removeClass('halfchecked checked').addClass('unchecked');

        _this.selector.find('.select-num').text('0');
    };

    module.exports = mtable;
})();